home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / comm / bbs / FilePather13.lha / FilePather / Install-FilePather < prev    next >
Encoding:
Text File  |  1995-04-08  |  17.2 KB  |  652 lines

  1. ; Script to install FilePather & FPBase
  2. ; Should be run from WorkBench by double-clicking on the icon
  3. ; Johan Torin '95
  4. ; $VER: FilePather_installation_script 2.0
  5.  
  6.  
  7. ; This installation is absolutely not the best written, but it's not so
  8. ; easy then you doesn't have a manual.  :(
  9. ; Version 2 note: Now I have a manual and it's still not easy! :)
  10.  
  11.  
  12. (Complete 0)
  13.  
  14. (Set FPVer 1)
  15. (Set FPRev 3)
  16. (Set FPBVer 1)
  17. (Set FPBRev 0)
  18.  
  19. (Set @Default-dest "C:")
  20.  
  21. (Set Version (/ (GetVersion) 65536))
  22. (If (< Version 37)
  23.     (Abort "FilePather and FPBase requries atlest 2.04 to run.\n"
  24.          "Sorry!"
  25.     )
  26. )
  27.  
  28. (While (= Exe 0)
  29.     (Set Exe
  30.     (Askoptions
  31.         (Prompt "Select install sessions to run:")
  32.         (Choices "FilePather" "FPBase")
  33.         (Help "\n\n\n\n\nSelect which of the install sessions to go for. "
  34.           "If you are running for a second time, you will have the "
  35.           "the possibility to not copy the executables again.")
  36.         (Default 3)
  37.     )
  38.     )
  39.     (If (= Exe 0)
  40.     (Message "\n\n\n\nYou must select atleast on install session to run!")
  41.     )
  42. )
  43.  
  44. (Complete 4)
  45.  
  46. (If (BITOR Exe 0)
  47.     (
  48.     (Set Destination
  49.         (AskDir
  50.         (Prompt "Select the location to install the executable(s)")
  51.         (Default @default-dest)
  52.         (Help "Choose a destination partition or directory "
  53.               "there the executable(s) should be placed. "
  54.               "Probably the best to have them in C:"
  55.         )
  56.         )
  57.     )
  58.     (Set @Default-dest Destination)
  59.  
  60.     (If (BITAND Exe 1)
  61.         (
  62.         (Set InstFP 1)
  63.         (If (Exists (Tackon Destination "FilePather"))
  64.             (
  65.             (Set Vernum (Getversion (Tackon Destination "FilePather")))
  66.                 (Set Ver (/ Vernum 65536))
  67.             (Set Rev (- Vernum (* ver 65536)))
  68.             (Set InstFP
  69.                 (Askbool
  70.                 (Prompt ("\n\n\n\nFilePather is already installed. Overwrite?")
  71.                     ("\n\n\nVersion to install: %ld.%ld\n" FPVer FPRev)
  72.                     ("Already installed:  %ld.%ld" Ver Rev)
  73.                 )
  74.                 (Help "\n\n\nIf you are re-running the script, it doesn't "
  75.                       "matter if you overwrite the already installed "
  76.                       "version, but should ofcourse be avoided."
  77.                 )
  78.                 )
  79.             )
  80.                 )
  81.         )
  82.         )
  83.     )
  84.     (If (BITAND Exe 2)
  85.         (
  86.         (Set InstFPB 1)
  87.         (If (Exists (Tackon Destination "FPBase"))
  88.             (
  89.             (Set Vernum (Getversion (Tackon Destination "FPBase")))
  90.                 (Set Ver (/ Vernum 65536))
  91.             (Set Rev (- Vernum (* ver 65536)))
  92.             (Set InstFPB
  93.                 (Askbool
  94.                 (Prompt ("\n\n\n\nFPBase is already installed. Overwrite?")
  95.                     ("\n\n\nVersion to install: %ld.%ld\n" FPBVer FPBRev)
  96.                     ("Already installed:  %ld.%ld" Ver Rev)
  97.                 )
  98.                 (Help "\n\n\nIf you are re-running the script, it doesn't "
  99.                       "matter if you overwrite the already installed "
  100.                       "version, but should ofcourse be avoided."
  101.                 )
  102.                 )
  103.             )
  104.                 )
  105.         )
  106.         )
  107.     )
  108.     (If (= InstFP  1)
  109.         (CopyFiles (Source "Bin/FilePather") (Dest Destination))
  110.     )
  111.     (If (= InstFPB  1)
  112.         (CopyFiles (Source "Bin/FPBase") (Dest Destination))
  113.     )
  114.     )
  115. )
  116.  
  117. (Complete 8)
  118.  
  119. ;Do some guessing in what mode to run.
  120. (Set TypeOther "Other")
  121. (If (Exists "ENV:FilePather/Type")
  122.     (
  123.     (Set OldType (Getenv 'FilePather/Type'))
  124. ;    (Set TypeOther (Cat "Other (" OldType ")"))
  125.     (Set DefType 4)
  126.     (If (= OldType "User")
  127.         (
  128.         (Set DefType 0)
  129.         (Set GuessedMode 0)
  130.         (Set TypeOther "Other")
  131.         )
  132.     )
  133.     (If (= OldType "BBS")
  134.         (
  135.         (Set DefType 1)
  136.         (Set GuessedMode 1)
  137.         (Set TypeOther "Other")
  138.         )
  139.     )
  140.     (If (= OldType "Trader")
  141.         (
  142.         (Set DefType 2)
  143.         (Set GuessedMode 0)
  144.         (Set TypeOther "Other")
  145.         )
  146.     )
  147.     (If (= OldType "Board")
  148.         (
  149.         (Set DefType 3)
  150.         (Set GuessedMode 1)
  151.         (Set TypeOther "Other")
  152.         )
  153.     )
  154.     )
  155.     (
  156.     (Set GuessedMode 0)
  157.     (Set DefType 99)
  158.     )
  159. )
  160.  
  161.  
  162. (If (BITOR Exe 0)
  163.     (Set InstType
  164.     (Askchoice
  165.         (Prompt "Choose if installing for User or BBS")
  166.         (Choices "User" "BBS (etc.)")
  167.         (Help "Selecting 'User' will (hopefully) do a almost Complete "
  168.           " 'Plug and Go' installation, while 'BBS' will just set "
  169.           "the arguments for FilePather and/or FPBase")
  170.         (Default GuessedMode)
  171.     )
  172.     )
  173. )
  174.  
  175. (Complete 12)
  176.  
  177. (Makedir "ENV:FilePather")
  178.  
  179. ;*** Only FilePather ***
  180. (If (BITAND Exe 1)
  181. (
  182.  
  183. ;(Message "\n\n\n\n\n\n'Elajt'ed text is strongly discouraged in the following sessions!")
  184.  
  185.  
  186. (If (= DefType 99)
  187.     (Set DefType InstType)
  188. )
  189.  
  190. (Set Type
  191.     (Askchoice
  192.     (Prompt "Choose Type:")
  193.     (Choices "User" "BBS   - PD" "Trader" "Board - Elite" (Cat TypeOther))
  194.     (Help "Select the type of application you are running or your 'profession'. "
  195.           "Selecting 'Other' will let you enter a custom Type"
  196.     )
  197.         (Default DefType)
  198.     )
  199. )
  200.  
  201. (Complete 15)
  202.  
  203. (If (= Type 0)
  204.     (Set TypeStr "User")
  205. )
  206.  
  207. (If (= Type 1)
  208.     (Set TypeStr "BBS")
  209. )
  210.  
  211. (If (= Type 2)
  212.     (Set TypeStr "Trader")
  213. )
  214.  
  215. (If (= Type 3)
  216.     (Set TypeStr "Board")
  217. )
  218.  
  219. (If (= Type 4)
  220.     (Set TypeStr
  221.     (AskString
  222.         (Prompt "Enter custom Type:\n\n")
  223.         (Help "\n\n\nDon't invent new types if not neccesary!")
  224.         (Default OldType)
  225.     )
  226.     )
  227. )
  228. (Run 'SetEnv "FilePather/Type"' TypeStr)
  229.  
  230.  
  231. (Complete 19)
  232. (If (= InstType 0)
  233.     (Set NameStr
  234.     (AskString
  235.         (Prompt "Enter your name/handle:\n\n")
  236.         (Help "Enter either your name as 'John Smith', "
  237.           "or your handle as 'CyberJack'.")
  238.         (If (Exists "ENV:FilePather/Name")
  239.         (Default (Getenv 'FilePather/Name'))
  240.         )
  241.     )
  242.     )
  243. )
  244.  
  245. (If (= InstType 1)
  246.     (
  247.     (Set NameStr
  248.         (AskString
  249.         (Prompt "Enter your applications name:\n\n")
  250.         (Help "Enter the name of the board, as '9:th Universe'.")
  251.         (If (Exists "ENV:FilePather/Name")
  252.              (Default (Getenv 'FilePather/Name'))
  253.         )
  254.         )
  255.     )
  256.     (Set SysOpStr
  257.         (AskString
  258.         (Prompt "Enter your name/handle (for sysop):\n\n")
  259.             (Help "Enter your name as 'John Smith' "
  260.               "or your handle as 'CyberJack'.")
  261.             (If (Exists "ENV:FilePather/SysOp")
  262.             (default (getenv 'FilePather/SysOp'))
  263.             )
  264.         )
  265.         )
  266.     (Run 'SetEnv "FilePather/SysOp"' SysOpStr)    
  267.     )
  268. )
  269.  
  270. (Run 'SetEnv "FilePather/Name"' NameStr)
  271.  
  272.  
  273. (Complete 23)
  274. (Set LocationStr
  275.     (AskString
  276.     (Prompt "Enter your geographic location/group:\n\n")
  277.     (Help "Enter either your geographical location, as 'Oslo,Norway', "
  278.           "or the group you belong to, as 'SleepWalkers'.")
  279.     (If (Exists "ENV:FilePather/Location")
  280.         (Default (Getenv 'FilePather/Location'))
  281.     )
  282.     )
  283. )
  284.  
  285. (Run 'SetEnv "FilePather/Location"' LocationStr)
  286.  
  287. (Complete 27)
  288. (If (Exists "ENV:FilePather/Number")
  289.     (Set NumberStr
  290.     (AskString
  291.     (Prompt "Enter your number(s) like this:\n"
  292.         "'+46-035-1806514' or:\n"
  293.         "'+1-810-4732020' or:\n"
  294.         "'+46-0346-58697|59245'\n\n"
  295.         "Set your local number to 'UNPUBL' if you either doesn't have "
  296.         "any number, or if you want to keep it secret.") 
  297.     (Help "The number may contain as many node specifications as you "
  298.           "like, just remember to separate them with '|'.")
  299.     (Default (Getenv 'FilePather/Number'))
  300.     )
  301.     )
  302.     (Set NumberStr
  303.     (Cat "+"
  304.         (AskString
  305.         (Prompt "Enter your country code like this:\n"
  306.             "46  - Sweden\n"
  307.             "1   -   USA\n"
  308.             "49  - Germany\n"
  309.             "358 - Finland\n")
  310.         (Help "Look up your country code in a phonebook if you can't "
  311.           "remember it.")
  312.         )
  313.         "-"
  314.         (AskString
  315.         (Prompt "Enter your area code like this:\n"
  316.             "035\n"
  317.             "212\n"
  318.             "086\n")
  319.         (Help "Look up your area code in a phonebook if you can't "
  320.           "remember it. (Schmuck! :)")
  321.         )
  322.         "-"
  323.         (AskString
  324.         (Prompt "Enter your local numbers like this:\n"
  325.             "186514\n"
  326.             "68723\n"
  327.             "4543623\n"
  328.             "58697|59245\n"
  329.             "741541|741542|741543|741544|741545|741546\n"
  330.             "or leave it as 'UNPUBL', if you don't want to "
  331.             "give your number away.")
  332.         (Help "Go look on your telephone to learn your number!"
  333.           "If you don't want to leave it out, or if you doesn't"
  334.           "have any telephone, then set it to 'UNPUBL'")
  335.         (Default "UNPUBL")
  336.         )
  337.  
  338.     )
  339.     )
  340. )
  341.  
  342. (Run 'SetEnv "FilePather/Number"' NumberStr)
  343.  
  344.  
  345. (Complete 30)
  346.  
  347.  
  348.  
  349. ;Only in user mode
  350. (If (= InstType 0)
  351. (
  352.  
  353. (Set EasyProcess
  354.     (AskBool
  355.     (Prompt    "This part will help you installing a way of getting "
  356.         "all your downloaded files processed in a easy manner. "
  357.         "All downloaded files will be put in a temporary directory. "
  358.         "When you start the 'ProcessAllFiles' scriptfile, which can "
  359.         "be started from your terminal program, ToolsDaemon, DirOpus "
  360.         "or whereever you want, all files in the temporary directory will "
  361.         "be FilePathed and moved to your real download dir. "
  362.         "\n\nDo you want to continue?\n")
  363.     (Help "Selecting 'Yes' will guide you through the parts of this installation. "
  364.           "Selecting 'No' will skip this part."
  365.     )
  366.     )
  367. )
  368.  
  369. (Complete 34)
  370.  
  371. (If (= EasyProcess 1)
  372.     (
  373.     (Copyfiles (Source "S/ProcessAllFiles") (Dest "S:") (Infos))
  374.     (Set TmpDown
  375.         (AskDir
  376.         (Prompt "Select or create a directory there downloaded files "
  377.             "should be placed. _MUST_ be on the same partion as "
  378.             "the real download directory! Note! _ONLY_ downloaded "
  379.             "files should ever be in this directory!")
  380.         (If (= (Exists "ENV:FilePather/TmpDownload") 0)
  381.             (Default "Sys:")
  382.         )
  383.         (If (Exists "ENV:FilePather/TmpDownload")
  384.             (Default (getenv 'FilePather/TmpDownload'))
  385.         )
  386.         (Help "Choose a destination partition or directory "
  387.               "there downloaded files should be placed."
  388.               "You must change in the terminal program too."
  389.         )
  390.         )
  391.     )
  392.     (Complete 37)
  393.     (Set Download
  394.         (Askdir
  395.         (Prompt "Select the directory there downloaded files "
  396.             "usually are placed (your old download dir). "
  397.             "_MUST_ be on the same partion as the "
  398.             "temporary directory!")
  399.         (If (= (Exists "ENV:FilePather/Download") 0)
  400.             (Default "Sys:")
  401.         )
  402.         (If (Exists "ENV:FilePather/Download")
  403.             (Default (Getenv 'FilePather/Download'))
  404.         )
  405.         (Help "Choose a the final directory "
  406.               "there downloaded files should be moved to."
  407.         )
  408.         )
  409.     )
  410.     (Complete 39)
  411.     (Run 'SetEnv "FilePather/TmpDownload"' TmpDown)
  412.     (Run 'SetEnv "FilePather/Download"' Download)
  413.     (Message "Expert information:\n\n"
  414.          "I have set some environment variables.\n"
  415.          "'FilePather/TmpDownload' = \n'" TmpDown "'\n\n" 
  416.          "'FilePather/Download' = \n'" Download "'\n\n"
  417.          "These must be changed if you move your download directory."
  418.          "\n\nBesides that are variables for Type, Name, Location and "
  419.          "so on also set. These may be edited anytime.")
  420.     (Complete 42)
  421.     (Message "Now you must change your default download directory in your "
  422.          "terminal program.\n\nIn NComm select:\n"
  423.          " 'Transfer/Default Directory/Download'\n"
  424.          "In Terminus select:\n"
  425.          "'Settings/Paths'\n\n"
  426.          "Set the download directory to the TEMPORARY directory "
  427.          "you previously selected\n(i.e. "TmpDown").")
  428.  
  429.     (Message "If you are using the NComm terminal program "
  430.          "you can run the 'ProcessAllFiles' scriptfile "
  431.          "from a function key (F1-10)\n\n"
  432.          "Start NComm,\n"
  433.          "Select 'System/Macrokeys',\n"
  434.          "Choose a (free) function key to use,\n"
  435.          "(F1-10 = Normal fkeys, S1-10 = With shift)\n\n"
  436.          "Enter: \n{arexx}\"Address Command 'S:ProcessAllFiles'\"\n"
  437.          "in the choosen stringgadget.")
  438.  
  439.  
  440.     (Complete 45)
  441.     (Message "The 'ProcessAllFiles' scriptfile can be runned either from "
  442.          "CLI or from Workbench. If you think 'ProcessAllFiles' is to "
  443.          "long then add this line to your S:Shell-Startup:\n"
  444.          "Alias PAF \"S:ProcessAllFiles\"\n\n"
  445.          "You maybe rather want to use a icon?\n"
  446.          "Just open the 'S' directory on your bootpartion, "
  447.          "use 'Window/Show/All Files' to see the icon for it. "
  448.          "Click the 'ProcessAllFiles' icon and select 'Icons/Leave Out' "
  449.          "to put it on the Workbench. Or drop the icon in the ToolsDaemons "
  450.          "prefs window there you also might add a hotkey, so you can access "
  451.          "ProcessAllFiles from most programs instantly!")
  452.     (Complete 48)
  453.     (Message "For adding it to a DirOpus menu or button you do the following:\n"
  454.          "Select 'Project/Configure', click either 'Buttons' or 'Menus'.\n"
  455.          "Click a free gadget there you want the command. Click on "
  456.          "'New Entry' and then the gadget reading 'Command' until it "
  457.          "says 'AmigaDos'. Enter 'S:ProcessAllFiles' in the string gadget "
  458.          "right to the 'AmigaDos' gadget. Enter a name in the "
  459.          "string gadget named 'Name', for example 'Process All Files'\n\n"
  460.          "Finished!")
  461.    )
  462. )
  463. )
  464. )
  465.  
  466.  
  467. )
  468. )
  469. ;*** End of FilePather ***
  470.  
  471. (Complete 53)
  472.  
  473. ;*** FPBase only ***
  474. (If (BITAND Exe 2)
  475.     (
  476.     (Set Reclist
  477.         (AskDir
  478.         (Set Def "S:")
  479.         (If (Exists "ENV:FilePather/Reclist ")
  480.             (Set Def (Pathonly (Getenv 'FilePather/Reclist')))
  481.         )
  482.         (Default Def)
  483.         (Prompt "Select the directory there the database files "
  484.             "should be placed. Select 'Proceed' "
  485.             "to accept the default (" Def ")")
  486.         (Help "The database program, FPBase, stores it's information "
  487.               "within two files, whichs names are created upon your "
  488.               "choice.")
  489.         )
  490.     )
  491.     (Complete 59)
  492.     (Set Reclist
  493.         (Tackon Reclist
  494.         (AskString
  495.             (Prompt "Enter filename for database:\n\n")
  496.             (Help "FPBase will create two files with diffrent suffixes; '.Rec' and '.Cnt'.")
  497.             (If (Exists "ENV:FilePather/Reclist")
  498.             (Default (Fileonly (Getenv 'FilePather/Reclist')))
  499.             (Default "FP_Reclist")
  500.             )
  501.         )
  502.         )
  503.     )
  504.     (Run 'SetEnv "FilePather/Reclist"' Reclist)
  505.     (Complete 65)
  506.     ;See if BBS or User.
  507.     (If (= InstType 1)
  508.         (
  509.         (Set RunMethod    ;BBS
  510.             (Askchoice
  511.             (Prompt "Should FPBase be runned in the background or just when "
  512.                 "needed?")
  513.             (Choices "Always (Fast, but uses some memory)" "When needed (Slow)")
  514.             (Help "Running in the background is probably the best, since the temporary "
  515.                   "files from FilePather might grow quite large. But if you are tight "
  516.                   "of memory you can run it on a hour/daily basis. "
  517.                   "Running in the the background will always keep the database "
  518.                   "up to date.")
  519.             (Default 0)
  520.             )
  521.         )
  522.         )
  523.         (
  524.         (Set RunMethod    ;User
  525.             (Askchoice
  526.             (Prompt "Should FPBase be runned in the background or just when "
  527.                 "needed?")
  528.             (Choices "Always (Fast, but uses some memory)" "When needed (Slow)")
  529.             (Help "You can either run it from your User-Startup, (ie. each "
  530.                   "time you boot your computer), or you can run it from the "
  531.                   "'ProcessAllFiles' scriptfile (recommended). "
  532.                   "Running in the the background will always keep the database "
  533.                   "up to date.")
  534.             (Default 1)
  535.             )
  536.         )
  537.         (Set ExtraUserHelp (Cat "\n\nYou should move the FPBase execution line "
  538.                    "in your User-Startup, to the ProcessAllFiles scriptfile. "
  539.                    "Then will the savelists be processed at once."))
  540.         )
  541.     )
  542.     (Complete 73)
  543.     (If (= RunMethod 0)
  544.         (            ;Fast method
  545.         (Set Savelist
  546.             (AskDir
  547.             (Set Def "T:")
  548.             (Default Def)
  549.             (Prompt "Select the directory there the temporay savefiles "
  550.                 "from FilePather should be placed. (In RAM: recommended) ")
  551.             (Help "FilePather saves the SavePath.lst:s to the "
  552.                   "savelist, which more or less immediately will "
  553.                   "be processed by FPBase. Since you have choosed "
  554.                   "to have FPBase running in the background, you "
  555.                   "probably want to keep them i RAM:")
  556.             )
  557.         )
  558.         (Complete 77)
  559.         (Set Savelist
  560.             (Tackon Savelist
  561.             (AskString
  562.                 (Prompt "Enter filename for temporary savefile:\n\n")
  563.                 (Help "\n\n\nNo help here! Out of imagination!")
  564.                 (If (Exists "ENV:FilePather/Savelist")
  565.                 (Default (Fileonly (Getenv 'FilePather/Savelist')))
  566.                 (Default "FP_Savelist")
  567.                 )
  568.             )
  569.             )
  570.         )
  571.         )
  572.         (            ;Slow method
  573.         (Complete 80)
  574.         (Set Savelist
  575.             (AskDir
  576.             (Set Def "S:")
  577.             (Default Def)
  578.             (Prompt "Select the directory there the temporary savefiles "
  579.                     "from FilePather should be placed. (RAM: not recommended) ")
  580.             (Help "FilePather saves the SavePath.lst:s to the "
  581.                   "savelist, which later will be processed by FPBase."
  582.                   "Since you have choosed to NOT run FPBase in the "
  583.                   "background, you must store them on disk.")
  584.             )
  585.         )
  586.         (Complete 86)
  587.         (Set Savelist
  588.             (Tackon Savelist
  589.             (AskString
  590.                 (Prompt "Enter filename for temporary savefile:\n\n")
  591.                 (Help "\n\n\nNo help here! Out of imagination!")
  592.                 (If (Exists "ENV:FilePather/Savelist")
  593.                 (Default (Fileonly (Getenv 'FilePather/Savelist')))
  594.                 (Default "FP_Savelist")
  595.                 )
  596.             )
  597.             )
  598.         )
  599.         )
  600.     )
  601.     (Run 'SetEnv "FilePather/Savelist"' Savelist)
  602.     (Complete 90)
  603.  
  604.     (If (= RunMethod 0)
  605.         (Startup "FPBase"    ;Fast
  606.         (Prompt "I will edit your User-startup so that "
  607.             "FPBase is started automatically." )
  608.         (Help "Well, what can I say? FPBase will hereafter "
  609.               "always start and run in the background.")
  610.         (Command (Cat "Run >NIL: <NIL: \"" (Tackon Destination "FPBase") "\" TASKPRI -1"))
  611.         )
  612.         (Startup "FPBase"    ;Slow
  613.         (Prompt "I will edit your User-startup so that "
  614.             "FPBase will process the old savelists on "
  615.             "each startup (async).\n\n Moving/copying the line in "
  616.             "the User-Startup to a more frequent executed "
  617.             "script is recommended." ExtraUserHelp )
  618.         (Help "Sorry! Out of Help!")
  619.         (Command (Cat "Run >NIL: <NIL: \"" (Tackon Destination "FPBase") "\" SAVELIST " Savelist " TASKPRI -1"))
  620.         )
  621.     )
  622.     )
  623. )
  624.  
  625. ;*** End of FPBase ***
  626.  
  627. (Complete 95)
  628.  
  629. ;Save for good...
  630. (Copyfiles (Source "Env-archive") (Dest "ENV:FilePather") (all))
  631. (Copyfiles (Source "ENV:FilePather") (Dest "ENVARC:FilePather") (all))
  632.  
  633.  
  634.  
  635. (Complete 99)
  636.  
  637. ;Not in usermode.
  638. (If (= InstType 1)
  639.     (
  640.     (Message "Well, it doesn't looks like it will be much more help "
  641.          "for you here. But since you are some sort of a sysop you "
  642.          "should be able to handle this yourself. All options as Name, "
  643.          "Number and Location are already set in ENV: as env. vars. The "
  644.          "only thing you have to think about is to insert FilePather "
  645.          "somewhere in the uploading process so all files get touched "
  646.          "by it. Some examples are included. Good luck!")
  647.     )
  648. )
  649.  
  650.  
  651. (Complete 100)
  652.